/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotBlank;

/**
 *
 * @author laverson
 */
@Entity
public class Emolumento implements Serializable {

    @Id
    @SequenceGenerator(name = "seq_emolumento", sequenceName = "seq_emolumento", allocationSize=1 )
    @GeneratedValue(generator = "seq_emolumento", strategy = GenerationType.SEQUENCE)
    private Long id;

    @Column(length=60)
    @NotBlank
    @NotNull
    @Size(max=60, message="Descrição deve ter no máximo 60 caracteres.")
    private String descricao;
    
    @Temporal(TemporalType.DATE)
    private Date dataCadastro = new Date();

    @Temporal(TemporalType.DATE)
    private Date dataVigor;
        
    @OneToMany(cascade=CascadeType.ALL, fetch= FetchType.LAZY)
    private List<EmolumentoItem> emolumentoItem;
    
    @Column(scale= 2, precision=19)
    private BigDecimal valorSelo;
    
    private boolean ativo = true;
    
    public Emolumento() {}

    public Emolumento(Long id, String descricao, Date dataCadastro, Date dataVigor, List<EmolumentoItem> emolumentoItem, BigDecimal valorSelo, boolean ativo) {
        this.id = id;
        this.descricao = descricao;
        this.dataCadastro = dataCadastro;
        this.dataVigor = dataVigor;
        this.emolumentoItem = emolumentoItem;
        this.valorSelo = valorSelo;
        this.ativo = ativo;
    }

    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public Date getDataVigor() {
        return dataVigor;
    }

    public void setDataVigor(Date dataVigor) {
        this.dataVigor = dataVigor;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<EmolumentoItem> getEmolumentoItem() {
        return emolumentoItem;
    }

    public void setEmolumentoItem(List<EmolumentoItem> emolumentoItem) {
        this.emolumentoItem = emolumentoItem;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public BigDecimal getValorSelo() {
        return valorSelo;
    }

    public void setValorSelo(BigDecimal valorSelo) {
        this.valorSelo = valorSelo;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Emolumento other = (Emolumento) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if ((this.descricao == null) ? (other.descricao != null) : !this.descricao.equals(other.descricao)) {
            return false;
        }
        if (this.dataCadastro != other.dataCadastro && (this.dataCadastro == null || !this.dataCadastro.equals(other.dataCadastro))) {
            return false;
        }
        if (this.dataVigor != other.dataVigor && (this.dataVigor == null || !this.dataVigor.equals(other.dataVigor))) {
            return false;
        }
        if (this.emolumentoItem != other.emolumentoItem && (this.emolumentoItem == null || !this.emolumentoItem.equals(other.emolumentoItem))) {
            return false;
        }
        if (this.valorSelo != other.valorSelo && (this.valorSelo == null || !this.valorSelo.equals(other.valorSelo))) {
            return false;
        }
        if (this.ativo != other.ativo) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 11 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 11 * hash + (this.descricao != null ? this.descricao.hashCode() : 0);
        hash = 11 * hash + (this.dataCadastro != null ? this.dataCadastro.hashCode() : 0);
        hash = 11 * hash + (this.dataVigor != null ? this.dataVigor.hashCode() : 0);
        hash = 11 * hash + (this.emolumentoItem != null ? this.emolumentoItem.hashCode() : 0);
        hash = 11 * hash + (this.valorSelo != null ? this.valorSelo.hashCode() : 0);
        hash = 11 * hash + (this.ativo ? 1 : 0);
        return hash;
    }

}
